//package reader;
//
//
//import java.util.HashMap;
//import java.util.LinkedList;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import java.util.Map.Entry;
//
//import org.eclipse.emf.common.util.EList;
//
//import domain.Entity;
//import domain.Metric;
//import domain.SystemHistory;
//import domain.SystemVersion;
//
//
//public class SystemHistoryAnalyser {
//	
//	public Map<Integer, List<Metric>>getHistoryForEntity(SystemHistory systemHistory, Entity entity){
//		Map<Integer, List<Metric>> entityVersionsMetricsMap = new HashMap<Integer, List<Metric>>();
//		
//		List<SystemVersion> versionsOfEntity = getVersionsOfEntity(systemHistory, entity);
//		
//		for (SystemVersion systemVersion : versionsOfEntity) {
//			List<Metric> metricsOfEntityInVersion = getMetricsOfEntityInVersion(systemVersion, entity);
//			entityVersionsMetricsMap.put(systemVersion.getRevisionNumber(), metricsOfEntityInVersion);
//		}
//		return entityVersionsMetricsMap;
//	}
//	
//	public Map<Integer, Double> getMetricEvolutionForEntity(SystemHistory systemHistory, Entity entityParameter, String metricShortName){
//		Map<Integer, Double> metricEvolutionForEntityMap = new HashMap<Integer, Double>();
//		Map<Integer, List<Metric>> entityVersionsMetricsMap = getHistoryForEntity(systemHistory, entityParameter);
//		
//		Set<Entry<Integer, List<Metric>>> versionsAndMetrics = entityVersionsMetricsMap.entrySet();
//		
//		for (Entry<Integer, List<Metric>> entryVersionAndMetric : versionsAndMetrics) {
//			Metric metric = searchMetric(entryVersionAndMetric.getValue(), metricShortName);
//			if (metric!=null){
//				metricEvolutionForEntityMap.put(entryVersionAndMetric.getKey(), metric.getValue());
//			}
//			//there isn't a value of this metric in a especific version
//			//this metric receive null in this version
//			else{
//				metricEvolutionForEntityMap.put(entryVersionAndMetric.getKey(), null);
//			}
//		}
//		
//		return null;
//	}
//	
//	
//	private Metric searchMetric(List<Metric> metrics, String metricShortName) {
//		for (Metric metric : metrics) {
//			if(metric.getShortName().equals(metricShortName))
//				return metric;
//		}
//		return null;
//	}
//
//	private List<Metric> getMetricsOfEntityInVersion(SystemVersion systemVersion, Entity entityParameter) {
//		Entity entity = searchEntity(entityParameter, systemVersion.getEntity());
//		if(entity!=null){
//			return entity.getMetric();
//		}
//		return null;
//	}
//
//	public List<SystemVersion>getVersionsOfEntity(SystemHistory systemHistory, Entity entityParameter){
//		List<SystemVersion> versionsOfEntity = new LinkedList<SystemVersion>();
//		Entity entity;
//		
//		for (SystemVersion systemVersion : systemHistory.getSystemVersion()) {
//			EList<Entity> entities = systemVersion.getEntity();
//			entity = searchEntity(entityParameter,entities);
//			if (entity!=null){
//				versionsOfEntity.add(systemVersion);
//			}	
//		}
//		return versionsOfEntity;
//		
//	}
//
//	private Entity searchEntity(Entity entityParameter, List<Entity> entities) {
//		for (Entity entity : entities) {
//			if (entity.getFullQualifiedName().equals(entityParameter.getFullQualifiedName()) && entity.getKind().equals(entityParameter.getKind())){
//				return entity;
//			}
//		}	
//		return null;
//	}
//}
